/***********************************************************
	
 File name: AAUserDefaults.h
 Author:    xuwei
 Description:
 对 NSUserDefaults 的简单封装, 使用类方法更简便易用.

 History:
 2018/02/27: Created
 
 ************************************************************/

#import <Foundation/Foundation.h>

#define USER_DEFAULTS           [NSUserDefaults standardUserDefaults]

@interface AAUserDefaults : NSObject

#pragma mark - 基本数据类型

/**
 存储数据到本地 plist, 若 value 为 nil, 则删除此条数据
 
 @param value  BOOL 类型
 @param defaultName  key
 */
+ (void)setBool:(BOOL)value forKey:(NSString *)defaultName;

/**
 根据 key 取出本地数据, 返回 BOOL 类型
 */
+ (BOOL)boolForKey:(NSString *)defaultName;

/**
 存储数据到本地 plist, 若 value 为 nil, 则删除此条数据
 
 @param value  NSInteger 类型
 @param defaultName  key
 */
+ (void)setInteger:(NSInteger)value forKey:(NSString *)defaultName;

/**
 根据 key 取出本地数据, 返回 NSInteger 类型
 */
+ (NSInteger)integerForKey:(NSString *)defaultName;

/**
 存储数据到本地 plist, 若 value 为 nil, 则删除此条数据
 
 @param value  float 类型
 @param defaultName  key
 */
+ (void)setFloat:(float)value forKey:(NSString *)defaultName;

/**
 根据 key 取出本地数据, 返回 float 类型
 */
+ (float)floatForKey:(NSString *)defaultName;

/**
 存储数据到本地 plist, 若 value 为 nil, 则删除此条数据
 
 @param value  double 类型
 @param defaultName  key
 */
+ (void)setDouble:(double)value forKey:(NSString *)defaultName;

/**
 根据 key 取出本地数据, 返回 double 类型
 */
+ (double)doubleForKey:(NSString *)defaultName;

#pragma mark - 对象类型

/**
 存储数据到本地 plist, 若 value 为 nil, 则删除此条数据
 
 @param value  NSString 对象
 @param defaultName  key
 */
+ (void)setString:(NSString *)value forKey:(NSString *)defaultName;

/**
 根据 key 取出本地数据, 返回 NSString 类型
 */
+ (NSString *)stringForKey:(NSString *)defaultName;

/**
 存储数据到本地 plist, 若 value 为 nil, 则删除此条数据
 
 @param value  NSArray 对象
 @param defaultName  key
 */
+ (void)setArray:(NSArray *)value forKey:(NSString *)defaultName;

/**
 根据 key 取出本地数据, 返回 NSArray 类型
 */
+ (NSArray *)arrayForKey:(NSString *)defaultName;

/**
 存储数据到本地 plist, 若 value 为 nil, 则删除此条数据
 
 @param value  NSDictionary 对象
 @param defaultName  key
 */
+ (void)setDictionay:(NSDictionary *)value forKey:(NSString *)defaultName;

/**
 根据 key 取出本地数据, 返回 NSDictionary 类型
 */
+ (NSDictionary<NSString *, id> *)dictionaryForKey:(NSString *)defaultName;

/**
 存储数据到本地 plist, 若 value 为 nil, 则删除此条数据
 
 @param value  NSData 对象
 @param defaultName  key
 */
+ (void)setData:(NSData *)value forKey:(NSString *)defaultName;

/**
 根据 key 取出本地数据, 返回 NSData 类型
 */
+ (NSData *)dataForKey:(NSString *)defaultName;

/**
 存储数据到本地 plist, 若 value 为 nil, 则删除此条数据

 @param value  存储对象
 @param defaultName  key
 */
+ (void)setObject:(id)value forKey:(NSString *)defaultName;

/**
 根据 key 取出本地 plist 中存储的值

 @param defaultName  key
 @return id 类型
 */
+ (id)objectForKey:(NSString *)defaultName;

/**
 移除本地数据

 @param defaultName  key
 */
+ (void)removeObjectForKey:(NSString *)defaultName;

@end
